#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "biblioteca.h"

#define MAX 50
#define q0 0
#define q1 1
#define q2 2
#define q3 3
#define qf 100
#define fim 200

#define max 100

int AFDNumeros(char string[]){
    int estadoAtual = 1;
    int proxEstado = 1;
    char token[MAX];
    int t = 1;
    int i = 0;
    char caractere;
    
    
    token[0] = lerChar();
    while (estadoAtual != fim){      //Condicao de parada: atingir o estado final
        if(buffer.ind_buffer > 49) encherBuffer();  //Chama a funcao para renovar o buffer
        
        caractere = buffer.buff[buffer.ind_buffer];
        estadoAtual = proxEstado;
        switch (estadoAtual) {
                
            case q1: 
                if (isalnum(caractere)){
                    token[t] = caractere;
                    t++;
                    buffer.ind_buffer++;
                    if ((buffer.buff[buffer.ind_buffer] != '.') && (!isalnum(buffer.buff[buffer.ind_buffer]))){   
                        proxEstado = qf;
                    }
                    else {
                        proxEstado = q1;
                    }
                }
                else if (caractere == '.') {
                    token[t] = caractere;
                    t++;
                    buffer.ind_buffer++;
                    if (!isalnum(buffer.buff[buffer.ind_buffer])){
                        proxEstado = qf;
                    }
                    else {
                        proxEstado = q2;
                    }
                }
                else {
                    proxEstado = qf;
                }
                break;
                
            case q2:
                if (caractere >= '0' && caractere <= '9'){
                    token[t] = caractere;
                    t++;
                    buffer.ind_buffer++;
                    if ((buffer.buff[buffer.ind_buffer] < '0') && (buffer.buff[buffer.ind_buffer] > '9')){
                        proxEstado = qf;
                    }
                    else {
                        proxEstado = q3;
                    }
                }
                else {
                    proxEstado = qf;
                }
                break;
                
            case q3:
                if (caractere >= '0' && caractere <= '9'){
                    token[t] = caractere;
                    t++;
                    buffer.ind_buffer++;
                    if ((buffer.buff[buffer.ind_buffer] < '0') && (buffer.buff[buffer.ind_buffer] > '9')){
                        proxEstado = qf;
                    }
                    else {
                        proxEstado = q3;
                    }
                }
                else {
                    proxEstado = qf;
                }
                break;
            case qf:
                //imprimir token no arquivo
                token[t] = '\0';
                strcpy(string, token);
                fprintf (saida, "Numero %s identificado \n", token);
                proxEstado = fim;
                //buffer.ind_buffer++;    //tirar isso???
                break;
                
            case fim: return 1;
            default: return 1;
        }
    }
}
